package cn.kgc.springmvc.day04.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author 课工场
 * @date 2024/11/13
 * @description mvc 对于web项目中异常处理的支持
 * <p>
 * 1.  局部异常处理
 *       对某个类中的异常处理    @ExceptionHandler
 * 2.  全局异常处理
 *       定义一个全局异常处理类  定义对于不同异常的处理机制  异常的处理方案对项目中的所有方法有效
 */
@Controller
@RequestMapping("exp")
public class MvcExceptionController {


    @RequestMapping("m1")
    @ResponseBody
    public String method1(Integer id) {


        if (id < 0) {
            throw new NullPointerException();
        }

        return " method1 invoke ok " + id;
    }


    @RequestMapping("m2")
    @ResponseBody
    public String method2(Integer id) {


        if (id < 0) {
            throw new ArrayIndexOutOfBoundsException();
        }

        return " method2 invoke ok " + id;
    }

    @RequestMapping("m3")
    @ResponseBody
    public String method3(Integer id) {


        if (id < 0) {
            throw new ClassCastException();
        }

        return " method3 invoke ok " + id;
    }

    // mvc 局部异常处理方式   通过添加@ExceptionHandler注解后  当前方法就是一个异常处理方法

    // @ExceptionHandler  添加在方法上 只对当前类中的方法有效
    // @ExceptionHandler({NullPointerException.class})
    // @ResponseBody
    // public Map<String,Object> nullPointerExceptionHandler(NullPointerException e){
    //
    //     e.printStackTrace();
    //
    //     HashMap<String, Object> result = new HashMap<>();
    //     result.put("code",110);
    //     result.put("message","服务器繁忙,请刷新重试");
    //
    //     return  result;
    // }
    //
    // @ExceptionHandler({ArrayIndexOutOfBoundsException.class})
    // @ResponseBody
    // public Map<String,Object> arrayIndexOutOfBoundsExceptionHandler(ArrayIndexOutOfBoundsException e){
    //
    //     e.printStackTrace();
    //
    //     HashMap<String, Object> result = new HashMap<>();
    //     result.put("code",110);
    //     result.put("message","数组下标越界了");
    //
    //     return  result;
    // }
    //
    //
    // @ExceptionHandler({Exception.class})
    // @ResponseBody
    // public Map<String,Object> otherExceptionHandler(Exception e){
    //
    //     e.printStackTrace();
    //
    //     HashMap<String, Object> result = new HashMap<>();
    //     result.put("code",110);
    //     result.put("message","出现异常了,什么异常不清楚...");
    //
    //     return  result;
    // }

}
